import Vue from 'vue';
import moment from 'moment';

Vue.filter('moment', value => moment.unix(value).format('YYYY-MM-DD HH:mm:ss'));
Vue.filter('momentNoS', value => moment.unix(value).format('YYYY-MM-DD HH:mm'));

Vue.filter('utc2bj', (value) => {
  const date = moment(value).add(8, 'h').format('YYYY-MM-DD HH:mm:ss');
  return date === 'Invalid date' ? value : date;
});
Vue.filter('bj2utc', (value) => {
  const date = moment.unix(value).subtract(8, 'h').format('YYYY-MM-DD HH:mm:ss');
  return date === 'Invalid date' ? value : date;
});
Vue.filter('divided8', value => (value || 0) / 100000000);
Vue.filter('d8fixed', value => ((value || 0) / 100000000).toFixed(8));

// 保留n位小数，不足的用0补充，（非四舍五入）
Vue.filter('fixedDecimals', (number, n) => {
  const num = (number || 0).toString();
  const integer = num.split('.')[0];
  const pureDecimal = num.split('.')[1];
  let result = '';
  if (!pureDecimal) {
    result = `${integer}.${(10 ** n).toString().slice(1)}`;
  } else if (pureDecimal.length >= n) {
    const reg = `/^(.*\\..{${n}}).*$/`;
    /* eslint-disable no-eval */
    result = num.replace(new RegExp(eval(reg)), '$1');
  } else {
    result = num + (10 ** (n - pureDecimal.length)).toString().slice(1);
  }
  return result;
});

Vue.filter('num', value => Number(value));

Vue.filter('num8', value => (Number(value) || 0).toFixed(8));

Vue.filter('formatHashrate', (value) => {
  let hashrate = Number(value);
  let i = 0;
  const units = ['', 'K', 'M', 'G', 'T', 'P'];
  while (hashrate > 1000) {
    hashrate /= 1000;
    i += 1;
  }
  return `${hashrate.toFixed(2)} ${units[i]}`;
});


Vue.filter('formatBalance', (value) => {
  let v = value;
  if (isNaN(v)) {
    return 0;
  }
  v *= 0.000000001;
  return v.toFixed(5);
});

Vue.filter('formatBalance8', (value) => {
  let v = value;
  if (isNaN(v)) {
    return 0;
  }
  v *= 0.00000001;
  return v.toFixed(8);
});

Vue.filter('formatDateLocale', (value, format) => {
  let date;
  let f = format;
  const newDate = (str) => { // 解决new Date()IE10不支持参数
    // 首先将日期分隔 ，获取到日期部分 和 时间部分
    const day = str.split(' ');
    // 获取日期部分的年月日
    const days = day[0].split('-');
    // 获取时间部分的 时分秒
    const mi = day[day.length - 1].split(':');
    // 获取当前date类型日期
    const d = new Date();
    // 给date赋值  年月日
    d.setUTCFullYear(days[0], days[1] - 1, days[2]);
    // 给date赋值 时分秒  首先转换utc时区 ：+8
    d.setUTCHours(mi[0] - 8, mi[1], mi[2]);
    return d;
  };
  if (!isNaN(value)) {
    date = new Date(value * 1000);
  } else if (value) {
    date = newDate(value);
  } else {
    return '-';
  }
  f = f || 'yyyy-MM-dd hh:mm';

  if (!isNaN(date)) {
    date = new Date(date - 0);
  } else if (typeof date === 'string') {
    date = newDate(date);
  }
  const o = {
    'M+': date.getMonth() + 1, // month
    'd+': date.getDate(), // day
    'h+': date.getHours(), // hour
    'm+': date.getMinutes(), // minute
    's+': date.getSeconds(), // second
    'q+': Math.floor((date.getMonth() + 3) / 3), // quarter
    S: date.getMilliseconds(), // millisecond
  };
  if (/(y+)/.test(f)) {
    f = f.replace(RegExp.$1, (`${date.getFullYear()}`).substr(4 - RegExp.$1.length));
  }
  Object.keys(o).forEach((k) => {
    if (new RegExp(`(${k})`).test(f)) {
      f = f.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : (`00${o[k]}`).substr((`${o[k]}`).length));
    }
  });
  return f;
});
